/*
 * Copyright (c) 2018-2999 湖南洛云网络科技有限公司 All rights reserved.
 *
 * https://www.gz-yami.com/
 *
 */

package com.yami.shop.service;


import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yami.shop.bean.app.dto.StationSalesDto;
import com.yami.shop.bean.model.Station;
import com.yami.shop.bean.param.OfflineHandleEventAuditParam;
import com.yami.shop.bean.param.StationDetailParam;
import com.yami.shop.common.util.PageParam;

import java.util.List;

/**
 * 自提点
 *
 * @author YXF
 * @date 2020-04-23 15:18:29
 */
public interface StationService extends IService<Station> {

    /**
     * 条件查询，分页获取自提门店信息列表
     * @param page 分页参数
     * @param station 条件查询参数
     * @return 分页自提门店信息列表
     */
    IPage<Station> getPage(PageParam<Station> page, Station station);

    /**
     * 审核门店
     * @param eventId 事件id
     * @param handleId 自提门店id
     * @param reapplyReason 重复申请原因
     */
    void auditApply(Long eventId, Long handleId, String reapplyReason);

    /**
     * 更新活动状态为下线
     * @param seckill 自提信息
     * @param offlineReason 下线原因
     * @param sysUserId 系统用户
     */
    void offline(Station seckill, String offlineReason, Long sysUserId);

    /**
     * 分页获取用户常用自提门店以及由近及远的自提门店列表
     * @param lat 维度
     * @param lng 经度
     * @param stationName 自提门店名称
     * @param shopId 店铺id
     * @param userId 用户id
     * @param page 分页参数
     * @return 分页用户常用自提门店以及由近及远的自提门店列表
     */
    IPage<StationDetailParam> getStationList(Double lat, Double lng, String stationName, Long shopId, String userId, Page page);

    /**
     * 审核活动
     * @param offlineHandleEventAuditParam 下线处理参数
     * @param sysUserId 系统用户id
     */
    void auditSeckill(OfflineHandleEventAuditParam offlineHandleEventAuditParam, Long sysUserId);

    /**
     * 获取自提门店详情
     * @param stationId 自提门店id
     * @return 门店详情
     */
    Station getStationInfoById(Long stationId);

    /**
     * 通过账号名，获取自提点信息
     * @param account 账号
     * @return 自提门店信息
     */
    Station getStationInfoByAccount(String account);

    /**
     * 获取自提点的销售数据
     * @param shopId 店铺id
     * @param stationId 自提门店id
     * @return
     */
    List<StationSalesDto> getStationSalesRecord(Long shopId, Long stationId);

    /**
     * 新增自提点
     * @param station 自提门店信息
     * @return 数量
     */
    int insertStation(Station station);

    /**
     * 修改自提点
     * @param station 自提门店信息
     * @return 数量
     */
    int updateStation(Station station);

    /**
     * 修改自提点账号密码
     * @param station 自提门店信息
     */
    void changeAccountInfo(Station station);

    /**
     * 通过账号统计自提门店数量
     * @param account 账号
     * @param stationId 自提门店id
     * @return
     */
    int getCountByAccount(String account, Long stationId);

    /**
     * 删除自提门店
     * @param stationId 自提门店id
     * @return
     */
    int removeStationById(Long stationId);

    /**
     * 删除自提门点信息缓存
     * @param stationId 自提门店id
     */
    void removeCacheByStationId(Long stationId);
}
